/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ejbs;

import com.stefanini.persistencia.Equipo;
import com.stefanini.persistencia.Grupo;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author EDWIN
 */
@LocalBean
@Stateless
public class EquipoManager {
  
    @PersistenceContext
    private EntityManager em;
    
    /**
     * Consulta todos los equipos disponibles en la base de datos
     *
     * @return
     */
    public List<Equipo> getAllEquipos() {
        try {
            Query q = em.createNamedQuery("Equipo.findAll");

            return q.getResultList();

        } catch (Exception e) {
            Logger.getLogger(EquipoManager.class.getName()).log(Level.SEVERE,
                    "Error al consultar los equipos", e);
            return new ArrayList<>();
        }
    }
    
    /**
     * Verifica si un grupo ya existe a partir de su nombre. Retorna true si el
     * grupo ya existe, false en caso contrario
     *
     * @param nombreGrupo
     * @return
     */
    public boolean verificarEquipoExistente(String nombreEquipo) {
        try {
            StringBuilder query = new StringBuilder();
            query.append("SELECT e FROM equipo g ");
            query.append("WHERE e.nombre = :NOMBRE_GRUPO ");

            Query q = em.createQuery(query.toString(), Grupo.class);
            q.setParameter("NOMBRE_GRUPO", nombreEquipo);

            q.getSingleResult();
            return true;

        } catch (NoResultException e) {
            Logger.getLogger(EquipoManager.class.getName()).log(Level.SEVERE,
                    "No se encontraron grupos con el nombre indicado");
            return false;
        } catch (Exception e) {
            Logger.getLogger(EquipoManager.class.getName()).log(Level.SEVERE,
                    "Error al verificar la existencia del grupo", e);
            return false;
        }
    }
    
    
    /**
     * Guarda un grupo en la base de datos
     * @param grupo
     * @param isEdit 
     * @return 
     *      true si el grupo fue guardado exitosamente, false en caso contrario
     */
    public boolean guardarEquipo(Equipo equipo, boolean isEdit) {
        try {
            if(isEdit) {
                em.merge(equipo);
            } else {
                em.persist(equipo);                
            }
            em.flush();
            return true;
        } catch (Exception e) {
            Logger.getLogger(EquipoManager.class.getName()).log(Level.SEVERE,
                    "Error al guardar el equipo", e);
            return false;
        }
    }
    
    public boolean eliminarEquipo(Equipo equipo){
        try{
            
            equipo = em.merge(equipo);
            em.remove(equipo);
            em.flush();            
            return true;
        }
        catch (Exception e){
            Logger.getLogger(GrupoManager.class.getName()).log(Level.SEVERE,
                    "Error al eliminar el grupo", e);
            return false;
        }
    }   
    
}
